package com.hzw.saas.api.chat;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hzw.saas.api.chat.bo.ChatUserGroupBO;
import com.hzw.saas.api.chat.bo.FriendInfo;
import com.hzw.saas.common.config.util.PageParam;

import java.util.ArrayList;
import java.util.List;

public interface IChatUserGroupService {
    /**
     * 查询用户所有的群组
     *
     * @param userId
     * @return
     */
    List<ChatUserGroupBO> findAllGroupByUser(String userId);

    /**
     * 根据用户id和朋友id查询唯一群组中的一条关联数据
     *
     * @param userId
     * @param friendId
     * @return
     */
    List<ChatUserGroupBO> findRelationship(String userId, String friendId);

    /**
     * 建立用户关系
     *
     * @param chatUserGroupBOS
     */
    void saveBatch(List<ChatUserGroupBO> chatUserGroupBOS);

    /**
     * 用户建立关系事件
     * 1.用户批准进群
     *
     * @param userId
     * @param applyId
     * @param groupId
     */
    void changeUserGroupEvent(String userId, String applyId, String groupId);

    /**
     * 分页查询好友列表
     *
     * @param userId
     * @return
     */
    IPage<FriendInfo> findFriendList(String userId, PageParam pageParam);

    /**
     * 分页查询待确认的申请
     *
     * @param userId
     * @param pageParam
     * @return
     */
    IPage<FriendInfo> needConfirm(String userId, PageParam pageParam);

    /**
     * 查询指定条件的用户和群组关联关系
     *
     * @param userId
     * @param groupType
     * @param status
     * @return
     */
    List<ChatUserGroupBO> findNeededChatUserGroupBO(List<String> userId, List<Integer> groupType, List<Integer> status);

    /**
     * 批量更新
     *
     * @param relationship
     */
    void updateBatch(List<ChatUserGroupBO> relationship);

    /**
     * 根据群组id查询群组成员
     * @param groupId
     * @return
     */
    List<ChatUserGroupBO> findUsersByGroupId(String groupId);

    List<ChatUserGroupBO> findByUserIdAndGroup(String groupId, String userId);

    /**
     * 根据主键进行删除
     * @param pid
     */
    void deleteById(String pid);

    /**
     * 修改用户群组关联表
     * @param byUserIdAndGroup
     */
    void updateById(ChatUserGroupBO byUserIdAndGroup);

    void deleteByGroupId(String groupId);

}
